package com.demo.config.watermark;

import cn.hutool.core.util.StrUtil;
import jakarta.servlet.http.HttpServletResponse;

import java.io.InputStream;
import java.io.OutputStream;

/**
 * 转换逻辑层-word等格式转pdf
 */
public class FileConverController {

	private static String getFileType(String filePath) {
		int i = filePath.lastIndexOf(".");
		String str = filePath.substring(i + 1);
		if (str.equals(TYPE.DOC) || str.equals(TYPE.DOCX)) {
			return TYPE.WORD.getName();
		}
		else if (str.equals(TYPE.XLS) || str.equals(TYPE.XLSX)) {
			return TYPE.EXCEL.getName();
		}
		else if (str.equals(TYPE.PPT) || str.equals(TYPE.PPTX)) {
			return TYPE.PPT.getName();
		}
		else if (str.equals(TYPE.PDF)) {
			return TYPE.PDF.getName();
		}
		return "";
	}

	/**
	 * @Description:系统文件在线预览接口
	 */
	public void onlinePreview(String url, HttpServletResponse response) throws Exception {
		// 获取文件类型
		String suffix = getFileType(url);

		if (StrUtil.isBlank(suffix)) {
			throw new Exception("文件格式不正确");
		}
		if (!suffix.equals("txt") && !suffix.equals("doc") && !suffix.equals("docx") && !suffix.equals("xls")
				&& !suffix.equals("xlsx") && !suffix.equals("ppt") && !suffix.equals("pptx")) {
			throw new Exception("文件格式不支持预览");
		}
		InputStream in = FileConvertUtil.convertNetFile(url, suffix);
		OutputStream outputStream = response.getOutputStream();
		// 创建存放文件内容的数组
		byte[] buff = new byte[1024];
		// 所读取的内容使用n来接收
		int n;
		// 当没有读取完时,继续读取,循环
		while ((n = in.read(buff)) != -1) {
			// 将字节数组的数据全部写入到输出流中
			outputStream.write(buff, 0, n);
		}
		// 强制将缓存区的数据进行输出
		outputStream.flush();
		// 关流
		outputStream.close();
		in.close();
	}

}
